题目分析
本题是周赛的第四题,思路还是比较清晰的,跟着样例模拟一下就能解答。
暴力
暴力解法也可以,记录每个会议室的结束时间,每次遍历n个会议室,如果有空闲,则使用索引最小的会议室。如果都没有空闲,则寻找最早结束的会议室。将该会议安排在这个会议室中,并更新这个会议室的结束时间即可。
算法的时间复杂度为$ O(mn) $,空间复杂度为O(n)。
1 | class Solution { |
小顶堆
小顶堆的思想是根据结束时间将会议室放在堆中,则堆顶的会议室就是结束最早的会议室。
还需要维护一个堆,表示当前空闲的会议室,根据编号将空闲的会议室也放入另一个堆中。
思路就非常清晰了,记空闲的会议室是spaceRoom,记占用的会议室为useRoom。
spaceRoom根据编号排序,useRoom根据结束时间排序。每次会议来的时候,更新useRoom和spaceRoom,因为useRoom中的堆顶,可能已经结束了,因此要加入到spaceRoom中。
算法的时间复杂度为$ O(mlog(n)) $,空间复杂度为O(n)。
1 | class Solution { |
刷题总结
题目难度不大,如果能在有限的时间里将暴力的思路写出来,也是挺不错的。